package com.ccubee.data.transfer.transfer.mod;


import com.ccubee.data.transfer.model.TransferRequest;
import com.ccubee.data.transfer.properties.transfer.DbProperties;
import com.ccubee.data.transfer.transfer.monitor.DataTransferMonitor;
import com.ccubee.data.transfer.transfer.monitor.MonitorProperties;

/**
 * @Author ycf
 * @Date 2022/11/20 22:24
 * @Version 1.0
 */
public interface ICommonMod {
    /**
     * 格式化
     *
     * @param s k1
     * @param t k2
     * @return 结果
     */
    default String formatKey(String s, String t) {
        return String.format("%s->%s", s, t);
    }

    /**
     * 实例
     *
     * @return 实例
     */
    String getInstance();

    /**
     * 传输参数
     *
     * @return 参数
     */
    TransferRequest getTransferRequest();

    /**
     * 监控数据
     *
     * @param dbProperties 数据库属性
     * @param i            表格配置
     * @return 属性
     */
    default MonitorProperties monitor(DbProperties dbProperties, DbProperties.TableConfig i) {
        return DataTransferMonitor.monitor(getInstance(),
                formatKey(dbProperties.getSource(),
                        dbProperties.getTarget()),
                formatKey(i.getSource(),
                        i.getTarget()), () -> MonitorProperties.builder()
                        .transferMod(getTransferRequest().getTransferMod())
                        .column(getTransferRequest().getColumn())
                        .start(getTransferRequest().getStart())
                        .end(getTransferRequest().getEnd())
                        .pageSize(getTransferRequest().getPageSize())
                        .run(true)
                        .build(), getTransferRequest().getReset());
    }

    /**
     * 监控数据
     *
     * @param dbProperties 数据库属性
     * @param i            表格配置
     * @param num          当前计数
     * @return 属性
     */
    default MonitorProperties monitor(DbProperties dbProperties, DbProperties.TableConfig i, long num) {
        return DataTransferMonitor.monitor(getInstance(),
                formatKey(dbProperties.getSource(),
                        dbProperties.getTarget()),
                formatKey(i.getSource(),
                        i.getTarget()), num);
    }

    /**
     * 监控数据
     *
     * @param dbProperties 数据库属性
     * @param i            表格配置
     * @param run          当前计数
     * @param num          计数
     * @return 属性
     */
    default MonitorProperties monitor(DbProperties dbProperties, DbProperties.TableConfig i, boolean run, long num) {
        return DataTransferMonitor.monitor(getInstance(),
                formatKey(dbProperties.getSource(),
                        dbProperties.getTarget()),
                formatKey(i.getSource(),
                        i.getTarget()), run, num);
    }

    /**
     * 监控数据
     *
     * @param dbProperties 数据库属性
     * @param i            表格配置
     * @param run          是否运行
     * @return 属性
     */
    default MonitorProperties monitor(DbProperties dbProperties, DbProperties.TableConfig i, boolean run) {
        return DataTransferMonitor.monitor(getInstance(),
                formatKey(dbProperties.getSource(),
                        dbProperties.getTarget()),
                formatKey(i.getSource(),
                        i.getTarget()), run);
    }

}
